"""
需求：演示TCP入门，即服务器端给客户端发送一句话，客户端收到后，给出回执信息
流程：
    1：服务器端 =》客户端发送一句话
    2：客户端接收到消息，打印，并给出回执信息，消息已收到
    3：服务器端收到客户端的回执后，打印即可

服务器端，实现步骤：
    1：创建服务器端的socket对象
    2：绑定ip和端口号
    3：设置最大的监听数（设置5， 1-128，允许挂载，挂起的数量）
    4：具体的监听动作，接收客户端请求，并获取1个socket对象，负责和该客户端进行交互
    5：给客户端发送一句话，二进制形式
    6：接收客户端发过来的回执信息（二进制格式），需要解码为字符串。
    7：释放资源，关闭socket
"""
# 当前代码为：服务器端的代码
import socket

# 1：创建服务器端的socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2：绑定ip和端口号
server_socket.bind(('127.0.0.1', 12306))

# 3：设置最大的监听数（设置5， 1-128，允许挂载，挂起的数量）
server_socket.listen(5)
print('服务器启动成功')

# 4：具体的监听动作，接收客户端请求，并获取1个socket对象，负责和该客户端进行交互
client_socket, client_addr = server_socket.accept()
print('客户端连接成功')
print(f'客户端地址：{client_addr}')

# 5：给客户端发送一句话，二进制形式
client_socket.send(b'Welcome to study socket!')

# 6：接收客户端发过来的回执信息（二进制格式），需要解码为字符串。
# 1024表示一次性接收客户端发送的数据的长度（单位：字节），超出则无法接收
recv_data_bytes = client_socket.recv(1024)
recv_data_str = recv_data_bytes.decode('utf-8')
print(f'服务器端接收到的客户端回执信息：{recv_data_str}')

# 7：释放资源，关闭socket
client_socket.close() # 和客户端交互的socket，一般要关闭